The complex data structures of such application programs typically contain a large number of various data items that are used for achieving the main functionality of the application program. For example, in the case of CAD programs each model contains data controlling the geometry of the parts, material specifications, attributes of the parts, global data and so on. All these data items are processed by the CAD program in a predetermined way to control the generation of graphical representations of the model, including various kinds of parts lists, bills of materials (BOMs) and so on. However, this processing is not very flexible since it is done by the program itself or by add-on components produced by associated suppliers that need to have a detailed knowledge about internals the program.
It would be desirable to provide a more flexible way of accessing and using the internal data processed by the application program. In particular, it should be possible for the end-user or for independent developers to access the data even if only a limited amount of knowledge about the internal data structures of the program is available. This, however, is not easy to accomplish because the data is typically stored in a complex way. The individual data items may be distributed across the model into various data objects, and the data objects may be interconnected in a complicated net structure. Even if some kind of data hierarchy is considered (e.g., assembly level, part level, feature level), it is still difficult to determine the appropriate hierarchy level for each data item.
Present text processing programs like those sold under the trademark Microsoft Word provide the possibility of accessing a predefined set of internal data items (like the title of a document or the current page number) under predefined names. This approach, however, is limited to relatively simple data structures appearing in the well-defined area of text processing.